package com.neuedu.jdbc.service;

import com.neuedu.jdbc.DBUtils;
import com.neuedu.jdbc.dao.AccountDao;
import com.neuedu.jdbc.po.Account;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

/***
 * 项目名称:  MyJDBC 
 * 包：  com.neuedu.jdbc.service 
 * date:   2025/11/12   10:28  
 * 描述:    跟账户有关的业务逻辑
 *  @author : 张金山
 *  作者博客:   https://blog.fulfill.com.cn
 */
public class AccountService {

    private AccountDao  accountDao ;



    /**
     * 查询账户列表
     * @return
     */
    public List<Account> list() throws SQLException, ClassNotFoundException {
        Connection con =  DBUtils.getConnection();
        AccountDao  accountDao  = new AccountDao(con);
        return accountDao.selectList();
    }


    /**
     * 转账
     * @return
     */
    public boolean transfer(double money) throws SQLException, ClassNotFoundException {

        Connection con =  DBUtils.getConnection();
        AccountDao  accountDao  = new AccountDao(con);


        // 从张三 转给 李四 100
        Account accountZhangSan = accountDao.selectById(1);
        Account accountLisi = accountDao.selectById(2);


        //设置不自动提交
        con.setAutoCommit(false);
        int count1 = 0;
        int count2 = 0;

       try{
           //张三   - 100
           accountZhangSan.setAmount(accountZhangSan.getAmount()  - money);
            count1 = accountDao.updateById(accountZhangSan);   // upDate  操作 立即 更新到数据库中了

           //从张三是账户 转走了 钱 之后  做了一些其他操作， 可能报错，产生了异常的
           // double   result =  0  /  0;



           //李四   + 100
           accountLisi.setAmount(accountLisi.getAmount()  + money);
           count2 = accountDao.updateById(accountLisi);


           //成功了  提交
           con.commit();
       }catch (Exception e){
            // 失败     回滚
           con.rollback();
       }

        return count1 + count2  == 2 ;
    }


    public static void main(String[] args) throws SQLException, ClassNotFoundException {

        AccountService service = new AccountService();


        //1 查询账户信息
        List<Account> list = service.list();
        list.forEach(System.out::println);


        //2 转账
        boolean success = service.transfer(100);
        System.out.println("转账状态:  success = " + success);

    }


}
